Ext.onReady(function(){

    //Para semestres traer desde 1 o 2, hasta el mayor de la tabla materia por carreras
    var years = [];
    var semesters = [];
    var secciones = ['A','B','C','D','E','F','G'];

    var today = new Date();
    currYear  = today.getFullYear();
    currMonth = today.getMonth();

    currSem = 1;
    if(currMonth > 6)
        currSem = 2;
    
    years.push([currYear]);
    years.push([currYear-1]);
    years.push([currYear+1]);

    s = 1;
    while (s<=12){
        semesters.push([s]);
        s++;
    }

    var h_obtener_success = function(obj){
        X.load('storeMateria', obj);
        X.get('facultad').disable();
        X.get('carrera').disable();
        X.get('anho').disable();
        X.get('seccion').disable();
        X.get('semestreanho').disable();
        X.get('semestre').disable();
        X.get('cargar').enable();
        X.get('cursosGrid').expand();
    }

    var h_cargar_success = function(obj){
        window.location = '/responsable';
    }
    
    var h_empty_facultad = function(){X.focus('facultad');}
    var h_empty_carrera  = function(){X.focus('carrera');}
    var h_empty_anho     = function(){X.focus('anho');}
    var h_empty_seccion  = function(){X.focus('seccion');}
    var h_empty_semanho  = function(){X.focus('semestreanho');}
    var h_empty_semestre = function(){X.focus('semestre');}

    var columnRenderer = function(value){
        var combo = this.editor
        var r = combo.findRecord(combo.valueField, value);
        return r ? r.get(combo.displayField) : combo.valueNotFoundText;
    }

    X.sStore({
      id     : 'yearStore',
      fields : ['years'],
      data   : years
    });

    X.sStore({
      id     : 'semStore',
      fields : ['semesters'],
      data   : semesters
    });

    X.sStore({
      id     : 'yearSemStore',
      fields : ['yearSemester'],
      data   : ['1','2']
    });

    X.sStore({
      id     : 'secStore',
      fields : ['seccion'],
      data   : secciones
    });

    X.store({
        id      : 'storeMateria',
        fields  : [ 'idCurso','nombre']
    });

    X.store({
        id     : 'storeResponsable',
        fields : [ 'materia','profesor','categoria','marca' ]
    });

    X.store({
        id     : 'horariosStore',
        fields : [ 'dia','hora' ]
    });

    X.store({
        id     : 'storeFacultad',
        fields : [ 'idFacultad', 'nombre' ]
    });

    X.store({
        id     : 'storeCarrera',
        fields : [ 'idCarrera', 'nombre' ]
    });

    X.store({
        id     : 'storeCategoria',
        fields : [ 'idCategoria', 'nombre' ]
    });

    X.store({
        id     : 'storeProfesor',
        fields : [ 'idProfesor', 'nombre', 'apellido',
                   {name: 'nombreCompleto', mapping:'apellido+", "+obj.nombre'} ]
    });

    X.aStore({
        id     : 'marcaStore',
        fields : [ 'idMarca','nombre' ],
        data   : [ [1,'Si'],[2,'No'] ]
    });

    X.aStore({
        id     : 'diaStore',
        fields : [ 'idDia','nombre' ],
        data   : [
            [1,'Domingo'],[2,'Lunes'],[3,'Martes'],[4,'Miércoles'],
            [5,'Jueves'],[6,'Viernes'],[7,'Sábado'],
        ]
    });

    var colModel = new Ext.grid.ColumnModel({
        defaults: {
            menuDisabled: true
        },
        columns: [
            {header: 'Materia', dataIndex: 'materia', width : 300,
                                editor: new X.form.combo({
                                            dfield  :'nombre',
                                            vfield  :'idCurso',
                                            storeId :'storeMateria'
                                        }),
                                renderer: columnRenderer
            },{
              header: 'Profesor', dataIndex: 'profesor', width : 196,
                                  editor: new X.form.combo({
                                              dfield  :'nombreCompleto',
                                              vfield  :'idProfesor',
                                              storeId :'storeProfesor'
                                          }),
                                  renderer: columnRenderer
            },{
              header: 'Categoría', dataIndex: 'categoria', width : 75,
                                   editor: new X.form.combo({
                                               dfield  :'nombre',
                                               vfield  :'idCategoria',
                                               storeId :'storeCategoria'
                                           }),
                                   renderer: columnRenderer
            },{
              header: 'Marca', dataIndex: 'marca', width : 55,
                               editor: new X.form.combo({
                                           dfield  :'nombre',
                                           vfield  :'idMarca',
                                           storeId :'marcaStore'
                                       }),
                               renderer: columnRenderer
            }
        ]
    });

    X.grid.editor({
        id          : 'cursosGrid',
        title       : 'Responsables',
        collapsed   : true,
        height      : 200,
        width       : 645,
        cm          : colModel,
        storeId     : 'storeResponsable',
        x           : 10,
        y           : 100,
        tbar : new Ext.Toolbar({
            items:[
                X.form.button({text:'Agregar', id:'addResponsable', icon:'/img/icon_agregar.png'
                }),'-',
                X.form.button({text:'Eliminar', id:'remResponsable', icon:'/img/icon_eliminar.png'})
            ]
        })
    });

    X.event.button('addResponsable', function(){
        var grid = X.get('cursosGrid');
        grid.stopEditing();
        grid.store.insert(0, new grid.store.recordType({}));
        grid.startEditing(0,0);
        grid.getSelectionModel().selectRow(0);
   });

   X.event.button('remResponsable', function(){
       var grid = X.get('cursosGrid');
       var record = grid.getSelectionModel().getSelected();
       if (record) {
           var index = grid.store.indexOf(record);
           grid.store.removeAt(index);
           if (index < grid.store.getCount())
               grid.getSelectionModel().selectRow(index);
           else
               grid.getSelectionModel().selectRow(index-1);
        }
   });
        
    X.form.panel({
        id     : 'loadCursoForm',
        height : 350,
        width  : 675,
        items  : [
            X.form.hidden ({id:'editorRows'}),
            X.form.label  ({x:10,  y:16, text:'Facultad:'}),
            X.form.label  ({x:380, y:16, text:'Año:'}),
            X.form.label  ({x:510, y:16, text:'Semestre del año:'}),
            X.form.label  ({x:10,  y:46, text:'Carrera:'}),
            X.form.label  ({x:380, y:46, text:'Sección:'}),
            X.form.label  ({x:510, y:46, text:'Semestre:'}),
            X.form.combo  ({x:70,  y:10, width:295, id:'facultad',
                                                    dfield:'nombre',
                                                    vfield:'idFacultad',
                                                    storeId:'storeFacultad'}),
            X.form.combo  ({x:435, y:10, width:60,  id:'anho',
                                                    value: currYear,
                                                    dfield:'years',
                                                    vfield:'years',
                                                    storeId:'yearStore'}),
            X.form.combo  ({x:610, y:10, width:45,  id:'semestreanho',
                                                    value: currSem,
                                                    dfield:'yearSemester',
                                                    vfield:'yearSemester',
                                                    storeId:'yearSemStore'}),
            X.form.combo  ({x:70,  y:40, width:295, id:'carrera',
                                                    dfield:'nombre',
                                                    vfield:'idCarrera',
                                                    storeId:'storeCarrera'}),
            X.form.combo  ({x:435, y:40, width:60,  id:'seccion',
                                                    value: 'A',
                                                    dfield:'seccion',
                                                    vfield:'seccion',
                                                    storeId:'secStore'}),
            X.form.combo  ({x:610, y:40, width:45,  id:'semestre',
                                                    dfield:'semesters',
                                                    vfield:'semesters',
                                                    storeId:'semStore'}),
            X.form.button ({x:575, y:70,  width:80, id:'aceptar', text:'Aceptar'}),
            X.form.button ({x:575, y:310, width:80, id:'cargar',  text:'Cargar',
                                                    disabled: true}),
            X.get('cursosGrid')
        ]
    });

    X.event.button('aceptar', function(){
        if (X.isempty('facultad'))
            X.msg.failure('Seleccione una "Facultad".', h_empty_facultad      );
        else if (X.isempty('carrera'))
            X.msg.failure('Seleccione una "Carrera".', h_empty_carrera        );
        else if (X.isempty('anho'))
            X.msg.failure('Seleccione un "Año".', h_empty_anho                );
        else if (X.isempty('seccion'))
            X.msg.failure('Seleccione una "Sección".', h_empty_seccion        );
        else if (X.isempty('semestreanho'))
            X.msg.failure('Seleccione un "Semestre del año".', h_empty_semanho);
        else if (X.isempty('semestre'))
            X.msg.failure('Seleccione un "Semestre".', h_empty_semestre       );
        else{
            X.ajax({
                url: '/responsable/ajax-materias',
                params: {
                    semestre     : X.value('semestre'),
                    semestreanho : X.value('semestreanho'),
                    carrera      : X.value('carrera'),
                    seccion      : X.value('seccion'),
                    anho         : X.value('anho')

                },
                afterSuccess: h_obtener_success
            });
        }
    });
    
    X.event.button('cargar', function(){

        var store = X.get('storeResponsable');
        var rowCount = store.getCount();

        if (rowCount<=0){
            X.msg.failure('Debe definir los responsables de los cursos');
        }
        else{
            for (var i=0; i<rowCount; i++){
                var grid = X.get('cursosGrid');
                var record = store.getAt(i);
                if(!(record.get('materia'))){
                    grid.getSelectionModel().selectRow(i);
                    X.msg.failure('Debe especificar la materia');
                }
                if(!(record.get('profesor'))){
                    grid.getSelectionModel().selectRow(i);
                    X.msg.failure('Debe especificar el profesor responsable');
                }
                if(!(record.get('categoria'))){
                    grid.getSelectionModel().selectRow(i);
                    X.msg.failure('Debe especificar la categoria del profesor');
                }
                if(!(record.get('marca'))){
                    grid.getSelectionModel().selectRow(i);
                    X.msg.failure('Debe especificar la necesidad o no de marcaciones');
                }
            }

            grid.getSelectionModel().selectAll();
            var sm = grid.getSelectionModel().getSelections();
            var responsibles = new Array();
            for (i=0; i<=sm.length-1; i++) {
                var data = {materia:'',profesor:'',categoria:'',marca:''};
                data.materia=sm[i].get('materia');
                data.profesor=sm[i].get('profesor');
                data.categoria=sm[i].get('categoria');
                data.marca=sm[i].get('marca');
                responsibles.push(data);
                delete data;
                data = {};
            }

            X.ajax({
                url: '/responsable/ajax-cargar',
                params: {
                    semestre     : X.value('semestre'),
                    anho         : X.value('anho'),
                    semestreanho : X.value('semestreanho'),
                    seccion      : X.value('seccion'),
                    responsibles : Ext.encode(responsibles)
                },

                afterSuccess: h_cargar_success
            });
        }
    });

    X.win.panel({
        id       : 'creaWindow',
        title    : 'Asignación de profesores',
        modal    : false,
        items    : X.get('loadCursoForm')
    });

    X.get('creaWindow').show();

});

